package cn.e4j.modular.api.service;

import cn.e4j.core.dto.IDto;
import cn.e4j.core.dto.impl.Dto;
import cn.e4j.core.util.DateUtils;
import cn.e4j.modular.api.mapper.FwpgMapper;
import cn.e4j.modular.api.util.CommonUtils;
import cn.e4j.modular.crm.entity.GwamlT;
import cn.e4j.modular.crm.entity.MmrdT;
import cn.e4j.modular.crm.entity.MmrfT;
import cn.e4j.modular.system.entity.SysUser;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 服务派工
 */
@Service
public class FwpgService{

    @Autowired
    private FwpgMapper fwpgMapper;

    /**
     * 获取服务单列表
     * mmrd019 1紧急  2一般
     *
     * @param inDto
     * @return
     */
    public List<Dto> getServiceOrderListData(Page<Object>page,Dto inDto){
        return fwpgMapper.getServiceOrderListPage(page,inDto);
    }

    /**
     * 获取维修人员列表
     * @param inDto
     * @return
     */
    public List<Dto> getUserListData(Page<Object>page,Dto inDto){

        return fwpgMapper.getUserListData(page,inDto);
    }

    /**
     * 服务派工提交
     * @param inDto
     */
    @Transactional
    public List<Dto> saveFwpg(SysUser user,Dto inDto){
        LocalDate date = LocalDate.now();
        String list = inDto.getString("orderList");
        JSONArray arrs = JSONArray.parseArray(list);
        JSONArray jsonArray = JSON.parseArray(list);
        String mmrfdocno = "WXPG" + DateUtils.getDate("yyyyMMddHHmmssSSS");
        List dtoList= new ArrayList<>();
        String userId = inDto.getString("userId");
        int i=0;
        for (Object obj:jsonArray){
            MmrdT mmrd_tPO = CommonUtils.toJavaClass(obj, MmrdT.class);
            GwamlT gwamlT = CommonUtils.toJavaClass(obj, GwamlT.class);
            JSONObject jsonObject = (JSONObject)arrs.get(i);
            MmrfT mmrf_tPO = new MmrfT();
            mmrf_tPO.setMMRFENT(user.getDBC());
            mmrf_tPO.setMMRFDOCNO(mmrfdocno);
            mmrf_tPO.setMMRFSEQ(BigDecimal.valueOf(i+1));
            mmrf_tPO.setMMRFDOCDATE(date);
            mmrf_tPO.setMMRF001(mmrd_tPO.getMMRDDOCNO());
            mmrf_tPO.setMMRF002(mmrd_tPO.getMMRDSEQ());
            mmrf_tPO.setMMRF003(mmrd_tPO.getMMRD002());
            mmrf_tPO.setMMRF004(mmrd_tPO.getMMRD003());
            mmrf_tPO.setMMRF005(inDto.getString("MMRE004"));
            mmrf_tPO.setMMRF006(inDto.getString("orgId"));
            mmrf_tPO.setMMRF007(inDto.getString("userId"));
//            mmrf_tPO.setMMRF008(CommonUtils.dateToLocalDate(inDto.getDate("date")));
            mmrf_tPO.setMMRF008(inDto.getLocalDate("date"));
//            mmrf_tPO.setMMRF008(date);
            mmrf_tPO.setMMRF013("");
            mmrf_tPO.setMMRFACTI("Y");
            mmrf_tPO.setMMRFUSER(user.getID());
            mmrf_tPO.setMMRFGRUP(user.getORG_ID());
            mmrf_tPO.setMMRFORIU(user.getID());
            mmrf_tPO.setMMRFORIG(user.getORG_ID());
            mmrf_tPO.setMMRFDATE(LocalDate.now());
            mmrf_tPO.setMMRFTIME(DateUtils.getTime());
            mmrf_tPO.insert();
            mmrd_tPO.setMMRD020("3");
            mmrd_tPO.setMMRDMODU(user.getID());
            //WHERE  mmrdent = #{mmrdent} AND mmrddocno = #{mmrddocno} AND mmrdseq = #{mmrdseq}
            UpdateWrapper<MmrdT> wrapper = new UpdateWrapper<>();
            wrapper.eq("MMRDENT",mmrd_tPO.getMMRDENT());
            wrapper.eq("MMRDDOCNO",mmrd_tPO.getMMRDDOCNO());
            wrapper.eq("MMRDSEQ",mmrd_tPO.getMMRDSEQ());
            mmrd_tPO.update(wrapper);

            i++;

            //预约者
            String mmrduser = mmrd_tPO.getMMRD017();
            String gwaml003 = gwamlT.getGWAML003();

            if (gwaml003==null){
                JSONObject detail = jsonObject.getJSONObject("orderDetail");
                if (detail!=null){
                    gwaml003 = detail.getString("MMRA004");
                }
            }
            Dto mmraDto = new Dto();
            mmraDto.put("MMRD002", mmrd_tPO.getMMRD002());
            mmraDto.put("MMRD003", mmrd_tPO.getMMRD003());
            Dto mmra = fwpgMapper.getGwakl004(mmraDto);
            Dto msgDto = new Dto();
            msgDto.put("pguser",userId);
            msgDto.put("yyuser",mmrduser);
            msgDto.put("GWAML003",gwaml003);
            msgDto.put("mmrf008",mmrf_tPO.getMMRF008());
            msgDto.put("gwakl004", mmra.getString("GWAKL004"));

            dtoList.add(msgDto);
        }

        return dtoList;
    }

    public Dto getGwaa2(Dto dto) {
        return fwpgMapper.getGwaa2(dto);
    }


    /**
     * 获取派工指定人员,服务预约人员
     * @param inDto
     * @return
     */
//    public List<Dto> getGwaa(Dto inDto){
//        inDto.put("GWAAENT","80");
//        return fwpgMapper.getGwaa(inDto);
//    }

    /**
     * 获取客户
     * @param inDto
     * @return
     */
    public Dto getGwakl004(Dto inDto){
        return fwpgMapper.getGwakl004(inDto);
    }
}
